package com.zhihao.domain.activity.service.quota.rule.factory;

import com.zhihao.domain.activity.service.quota.rule.IActionChainNode;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * @author Jackson
 * @create 2025/3/20 22:10
 * @description 活动责任链工厂
 */
@Service
public class DefaultActivityChainFactory {

    private final IActionChainNode actionChain;

    /**
     * 1. 通过构造函数注入。
     * 2. Spring 可以自动注入 IActionChain 接口实现类到 map 对象中，key 就是 bean 的名字。
     * 3. 活动下单动作的责任链是固定的，所以直接在构造函数中组装即可。
     */
    public DefaultActivityChainFactory(Map<String, IActionChainNode> actionChainGroup) {
        actionChain = actionChainGroup.get(ActionModel.ActivityBaseAction.getCode());
        actionChain.appendNext(actionChainGroup.get(ActionModel.ActivitySkuStockAction.getCode()));
    }

    public IActionChainNode openActionChain() {
        return this.actionChain;
    }


    @Getter
    @AllArgsConstructor
    public enum ActionModel {

        ActivityBaseAction("activity_base_action", "活动基础规则过滤(状态、日期、库存)"),
        ActivitySkuStockAction("activity_sku_stock_action", "活动扣减库存校验"),
        ;

        private final String code;
        private final String info;

    }
}
